<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
 <script>
/*

函数：
    函数声明

    函数执行

    立即执行 函数表达式：IIFE
        声明的时候就立即执行了
        匿名函数自执行


    将函数声明变成函数表达式：给函数加括号
        变成表达式之后再加括号就能直接执行了

    特点：好处
        1.保证函数的私有性，没有人能再次调用
        2.节省性能，节省空间开销：函数执行完就没用了，就会消失，释放内存

    书写方式：
        括号是非常容易引发歧义
        括号的用法：
            1.函数执行
            2.表达式优先级
        需要补齐分号
            需要在立执行函数前后加分号，作为断句，其次或者加上一个大括号将其包裹成为代码块

    立执行函数传参:
    (function(x,y//形参){
        console.log("1")
    })(1,2//实参)






*/
//普通函数表达式
//let f = function (){
//    console.log(123)
//}
//f()

//立即执行函数表达式
//(function(){
//    console.log("1")
//})()
//;
//(function(){
//    console.log("2")
//})()

/*

箭头函数：非常好用，写起来简单 推荐大家使用
    执行的时候 箭头函数与普通函数没区别
    等价于函数表达式的一个简写，不是函数声明
    ES6当中的知识：
    使用箭头函数替代 普通函数表达式

书写形式：
    ()=>{}

将普通函数改写成箭头函数，删除 function ，在 () 和 {} 中添加 => ,注意=与>中间不能有空格

箭头函数传参：
    ()=>{},在()里写形参
    let foo2 = (x,y) => {
        console.log(x+y)
    }

1.当形参只有一个的时候，可以省略不写小括号(),即：
let foo4 = x => {
    return x*x
}

2.如果大括号中只有一个语句并且是 return 语句
可以连同大括号{} 和 return 一起省略，改成小括号()，即:
let foo5 = x => (x*x)


立执行函数与箭头函数结合
    ;((x,y) => {
        console.log(x+y)
    })(1,2)



*/

let foo1 = function(){
    return"666"
}

let foo2 = () => {
    return"666"
}

;((x,y) => {
    console.log(x+y)
})(1,2)





 </script>
</body>
</html>